home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / trueSpace 7.6 / tS761B8Std.exe / {app} / Scripts / D3D / RsD3DHighlightRender.fx < prev    next >
Text File  |  2008-06-10  |  4KB  |  170 lines

  1. //----------------------------------------------------------------------
  2. //Highlight render
  3. //
  4. //Author - Michal Valient
  5. //Copyright (C) 2004-2008 Caligari corporation
  6. //
  7. //----------------------------------------------------------------------
  8.  
  9. uniform float4x4 mToClip;
  10.  
  11. uniform float4 cColorMultiplier;
  12. uniform float4 cColorModifier;
  13. uniform float fOpacity;
  14.  
  15.  
  16. uniform float fDepthBias = 1.0f / 65536.0f; //Set depth bias to the value that will work for 16bit z-buffers
  17.  
  18. #ifdef RsShaderHWSKINNING
  19.     #define SKIN_INDEX_SHIFT 0.001960784313725490196078431372549f
  20.     #define RTD3DMESH_MAXIMUM_BONE_COUNT 64
  21.     float4x3 RsD3DMaterialFromME_mSkinMatrices[RTD3DMESH_MAXIMUM_BONE_COUNT];
  22. #endif //RsShaderHWSKINNING
  23.  
  24. struct VS_MATPOINT_IN {
  25.     float4 vPosition    : POSITION; //position in object space
  26.     float4 cPointColor  : COLOR;    //point color
  27. };
  28.  
  29. typedef struct {
  30.     float4 vPosition    : POSITION; //position in object space
  31.     float4 cPointColor  : COLOR;    //point color
  32. } VS_MATPOINT_OUT;
  33.  
  34. VS_MATPOINT_OUT VS_CMaterialPointRender(in VS_MATPOINT_IN input
  35.  
  36. #ifdef RsShaderHWSKINNING
  37.                                                     , in float4 D3_vInputBlendIndices : BLENDINDICES
  38.                                                     , in float4 D3_cInputBlendWeight : BLENDWEIGHT
  39. #endif //RsShaderHWSKINNING
  40.  
  41. )
  42. {
  43.     float4 local_vertex_position;
  44.     
  45. #ifdef RsShaderHWSKINNING
  46.  
  47.     float3 tmp_position = 0;
  48.      
  49.     //Get the blend weights
  50.     float4 blend_weights = (255.0f/127.0f)*D3_cInputBlendWeight - (128.0f / 127.0f);
  51.     float4 blend_indices = D3_vInputBlendIndices * 255.0f + SKIN_INDEX_SHIFT;
  52.     
  53.     /// Skin it!
  54.     for (int bone_idx = 0; bone_idx<4; bone_idx++)
  55.     {
  56.         int matrix_idx            = (int)blend_indices[bone_idx];
  57.         float weight            = blend_weights[bone_idx];
  58.         
  59.         float3 bone_position    = weight*mul(input.vPosition,        RsD3DMaterialFromME_mSkinMatrices[matrix_idx]);
  60.         
  61.         tmp_position            += bone_position;
  62.     }
  63.  
  64.     local_vertex_position.xyz = tmp_position.xyz;
  65.     local_vertex_position.w   = 1.0f;
  66.  
  67. #else
  68.  
  69.     local_vertex_position = input.vPosition;
  70.  
  71. #endif //RsShaderHWSKINNING
  72.  
  73.     VS_MATPOINT_OUT output;
  74.     output.vPosition = mul(local_vertex_position, mToClip); //vertex clip pclip position
  75.     output.vPosition.z = ((output.vPosition.z/output.vPosition.w) - fDepthBias) * output.vPosition.w;
  76.     output.cPointColor = cColorMultiplier * input.cPointColor + cColorModifier;
  77.     output.cPointColor.a = fOpacity * input.cPointColor.a;
  78.     return output;
  79. }
  80.  
  81. float4 PS_CMaterialPointRender(float4 cPointColor : COLOR) : COLOR
  82. {
  83.     return cPointColor;
  84. }
  85.  
  86. vertexshader VS_PointRenderer = compile vs_2_0 VS_CMaterialPointRender();
  87.  
  88. pixelshader PS_PointRenderer = compile ps_1_1 PS_CMaterialPointRender();
  89.  
  90. ///Point rendering for PS capable hardware
  91. technique T_PointRender_PS
  92. {
  93.     pass P0
  94.     {
  95.         VertexShader = (VS_PointRenderer);
  96.         PixelShader = (PS_PointRenderer);
  97.  
  98.         AlphaBlendEnable = true;
  99.         SrcBlend = SRCALPHA;
  100.         DestBlend = INVSRCALPHA;
  101.         
  102.         ZEnable = true;
  103.         ZFunc = LESSEQUAL;
  104.         ZWriteEnable = false;
  105.  
  106.         SpecularEnable = false;
  107.         ColorVertex = true;
  108.  
  109.         CullMode = CCW;
  110.     }
  111. }
  112.  
  113. technique T_PointRender_Plain_Cascade
  114. {
  115.     pass P0
  116.     {
  117.         VertexShader = (VS_PointRenderer);
  118.         PixelShader = NULL;
  119.  
  120.         AlphaBlendEnable = true;
  121.         SrcBlend = SRCALPHA;
  122.         DestBlend = INVSRCALPHA;
  123.         
  124.         ZEnable = true;
  125.         ZFunc = LESSEQUAL;
  126.         ZWriteEnable = false;
  127.         
  128.         Lighting = false;
  129.         ShadeMode = GOURAUD;
  130.  
  131.         SpecularEnable = false;
  132.         ColorVertex = true;
  133.  
  134.         // Set the stages.
  135.         ColorOp[0]   = SELECTARG1;
  136.         ColorArg1[0] = DIFFUSE;
  137.         ColorOp[1]   = DISABLE;
  138.         AlphaOp[0]   = SELECTARG1;
  139.         AlphaArg1[0] = DIFFUSE;
  140.         AlphaOp[1]   = DISABLE;
  141.         
  142.         CullMode = CCW;
  143.     }
  144. }
  145.  
  146. technique T_PointRender_Plain
  147. {
  148.     pass P0
  149.     {
  150.         VertexShader = (VS_PointRenderer);
  151.         PixelShader = NULL;
  152.  
  153.         AlphaBlendEnable = true;
  154.         SrcBlend = SRCALPHA;
  155.         DestBlend = INVSRCALPHA;
  156.         
  157.         ZEnable = true;
  158.         ZFunc = LESSEQUAL;
  159.         ZWriteEnable = false;
  160.         
  161.         Lighting = false;
  162.         ShadeMode = GOURAUD;
  163.  
  164.         SpecularEnable = false;
  165.         ColorVertex = true;
  166.  
  167.         CullMode = CCW;
  168.     }
  169. }
  170.